// 用户数据请求设置
const Router = require('koa-router')
const router = new Router()
const User = require('../../modules/User').User // 用户数据模板
const Ids = require('../../modules/User').Ids // 用户id集合模板
const creatToken = require('../../modules/token').creatToken

// 登录，登录验证
router.post('/login',async ctx => {
  const userNmae = ctx.request.body.name
  const userPassd = ctx.request.body.passd
  // 查找用户名，判断用户是否存在
  const findResult = await User.find({
    name: userNmae
  })
  // 如果不存在， 则证明用户名错误
  if(findResult.length < 0) {
    ctx.body = {
      code: 0,
      msg: '用户名不存在或用户名错误'
    }
  } else { // 用户名存在，对比密码
    if(findResult[0].passd == userPassd) {
      // 获取token 返回给客户端，并且修改token过期时间
      const token = findResult[0].token // 旧token，用于查询
      const nowTime = new Date().getTime() // 获取当前时间，用于更新token时间
      const newToken = await creatToken(ctx.request.body.name) // 生成新的token
      // 异步更新token数据
      await User.updateMany({token:token},{$set:{token_time: nowTime,token:newToken}},() => {})
      .then(()=> {
        // 更新完毕后，返回客户端新的token
        ctx.body = {
          code: 1,
          msg: '登录成功',
          data: {
            id: findResult[0].id, // 获取用户id，用于存储关联用户其他数据
            token:newToken
          }
        }
      })
    } else {
      ctx.body = {
        code: 0,
        msg: '密码错误'
      }
    }
  }
})

//用户注册请求
router.post('/regist', async ctx => {
  // 查找用户名，判断是否用户名重复，重复则不能注册
  const findResult = await User.find({
    name: ctx.request.body.name
  })
  if(findResult.length > 0) {
    ctx.body = {
      code: 0,
      msg: '用户名已存在'
    }
  } else {
    // 保存前先查找用户id子集
    const userid = await Ids.find().count() // 查找ids表中的数据数量
    // 实例化用户id数据
    const id = new Ids( // 
      {
        name: ctx.request.body.name,
        id: userid + 1 // 新用户数据再原有自己总量上加1即为新ID
      }
    )
    // 生成token 保存到用户数据中
    // 保存数据到ids集合当中，成功后返回id关联到用户数据
    await id.save().then( async idsRes => {
      // 生成token
      const token = await creatToken(ctx.request.body.name)
      // 实例化用户数据模板
      const newname = new User({
        name: ctx.request.body.name, // 用户名
        passd: ctx.request.body.passd, // 密码
        date: ctx.request.body.date, // 创建日期
        id: idsRes.id, // 接收绑定ids中的id
        token: token // 创建的token
      })
      // 保存数据，保存成功返回成功数据
      await newname.save().then(
        res => {
          ctx.body = {
            code: 1,
            msg: '注册成功',
            data: {
              token: res.token
            }
          }
        }
      ).catch(err => {
        ctx.body = {
          code: 0,
          msg: '注册失败'
        }
      })
    }).catch(() => {
      ctx.body = {
        code: 0,
        msg: '注册失败'
      }
    })
  }
})

module.exports = router.routes()